/**
 * @file       _3_icc.part.hpp
 * @brief
 * @date       2021-06-14
 * @author     Peter
 * @copyright
 *      Peter of [ThinkSpirit Laboratory](http://thinkspirit.org/)
 *   of [Nanjing University of Information Science & Technology](http://www.nuist.edu.cn/)
 *   all rights reserved
 */

#ifndef KERBAL_TYPE_TRAITS_DETAIL_COMPILER_INTRINSICS_PART__3_ICC_PART_HPP
#define KERBAL_TYPE_TRAITS_DETAIL_COMPILER_INTRINSICS_PART__3_ICC_PART_HPP

#include <kerbal/config/compiler_private.hpp>


#if KERBAL_ICC_VERSION_MEETS(13, 0, 1)

#	ifndef KERBAL_HAS_INTRINSIC_IS_ABSTRACT_SUPPORT
#		define KERBAL_INTRINSIC_IS_ABSTRACT(T)					__is_abstract(T)
#	endif

#	ifdef KERBAL_INTRINSIC_IS_ABSTRACT
#		define KERBAL_HAS_INTRINSIC_IS_ABSTRACT_SUPPORT 1
#	endif



#	ifndef KERBAL_HAS_INTRINSIC_IS_BASE_OF_SUPPORT
#		define KERBAL_INTRINSIC_IS_BASE_OF(BASE, DERIVED)			__is_base_of(BASE, DERIVED)
#	endif

#	ifdef KERBAL_INTRINSIC_IS_BASE_OF
#		define KERBAL_HAS_INTRINSIC_IS_BASE_OF_SUPPORT 1
#	endif



#	ifndef KERBAL_HAS_INTRINSIC_IS_CLASS_SUPPORT
#		define KERBAL_INTRINSIC_IS_CLASS(T)						__is_class(T)
#	endif

#	ifdef KERBAL_INTRINSIC_IS_CLASS
#		define KERBAL_HAS_INTRINSIC_IS_CLASS_SUPPORT 1
#	endif



#	if KERBAL_HAS_INTRINSIC_IS_CONVERTIBLE_SUPPORT
#		define KERBAL_INTRINSIC_IS_CONVERTIBLE(FROM, TO)			__is_convertible_to(FROM, TO)
#	endif

#	ifdef KERBAL_INTRINSIC_IS_CONVERTIBLE
#		define KERBAL_HAS_INTRINSIC_IS_CONVERTIBLE_SUPPORT 1
#	endif



#	ifndef KERBAL_HAS_INTRINSIC_IS_EMPTY_SUPPORT
#		define KERBAL_INTRINSIC_IS_EMPTY(T)						__is_empty(T)
#	endif

#	ifdef KERBAL_INTRINSIC_IS_EMPTY
#		define KERBAL_HAS_INTRINSIC_IS_EMPTY_SUPPORT 1
#	endif



#	ifndef KERBAL_HAS_INTRINSIC_IS_ENUM_SUPPORT
#		define KERBAL_INTRINSIC_IS_ENUM(T)						__is_enum(T)
#	endif

#	ifdef KERBAL_INTRINSIC_IS_ENUM
#		define KERBAL_HAS_INTRINSIC_IS_ENUM_SUPPORT 1
#	endif



#	ifndef KERBAL_HAS_INTRINSIC_IS_FINAL_SUPPORT
#		define KERBAL_INTRINSIC_IS_FINAL(T)						__is_final(T)
#	endif

#	ifdef KERBAL_INTRINSIC_IS_FINAL
#		define KERBAL_HAS_INTRINSIC_IS_FINAL_SUPPORT 1
#	endif



#	ifndef KERBAL_HAS_INTRINSIC_IS_POLYMORPHIC_SUPPORT
#		define KERBAL_INTRINSIC_IS_POLYMORPHIC(T)					__is_polymorphic(T)
#	endif

#	ifdef KERBAL_INTRINSIC_IS_POLYMORPHIC
#		define KERBAL_HAS_INTRINSIC_IS_POLYMORPHIC_SUPPORT 1
#	endif



#	ifndef KERBAL_HAS_INTRINSIC_IS_UNION_SUPPORT
#		define KERBAL_INTRINSIC_IS_UNION(T)						__is_union(T)
#	endif

#	ifdef KERBAL_INTRINSIC_IS_UNION
#		define KERBAL_HAS_INTRINSIC_IS_UNION_SUPPORT 1
#	endif

#endif




#if KERBAL_ICC_VERSION_MEETS(18, 0, 0) // 18.0.0

#	ifndef KERBAL_HAS_INTRINSIC_IS_AGGREGATE_SUPPORT
#		define KERBAL_INTRINSIC_IS_AGGREGATE(T)					__is_aggregate(T)
#	endif

#	ifdef KERBAL_INTRINSIC_IS_AGGREGATE
#		define KERBAL_HAS_INTRINSIC_IS_AGGREGATE_SUPPORT 1
#	endif

#endif


#endif // KERBAL_TYPE_TRAITS_DETAIL_COMPILER_INTRINSICS_PART__3_ICC_PART_HPP
